const path = require('path');
const Jimp = require('jimp');

const multer = require('koa-multer');

const {
    AVATAR_PATH,
    PICTURE_PATH 
} = require ('../app/file-path');

try {

    const storage = multer.diskStorage({
        destination: (req, file, cb) => {
          cb(null, AVATAR_PATH);
        },
        filename: (req, file, cb) => {
            // console.log(file);
            // 打印：
            // {
            //     fieldname: 'avatar',
            //     originalname: '4.jpg',
            //     encoding: '7bit',
            //     mimetype: 'image/jpeg'
            //   }
          cb(null, Date.now() + path.extname(file.originalname));   //file.originalname可以拿到文件本身的文件名
        }
      })
    
      const upload = multer({
        storage      //将storage属性传入到对象中
      });
    
    const avatarHandler = upload.single('avatar');
    


  //   const storage1 = multer.diskStorage({
  //     destination: (req, file, cb) => {
  //       cb(null, './uploads/picture');
  //     },
  //     filename: (req, file, cb) => {
  //         // console.log(file);
  //         // 打印：
  //         // {
  //         //     fieldname: 'avatar',
  //         //     originalname: '4.jpg',
  //         //     encoding: '7bit',
  //         //     mimetype: 'image/jpeg'
  //         //   }
  //       cb(null, Date.now() + path.extname(file.originalname));   //file.originalname可以拿到文件本身的文件名
  //     }
  //   })
  
  //   const upload1 = multer({
  //     storage1      //将storage属性传入到对象中
  //   });
  
  // const pictureHandler = upload1.array('picture', 9);
  const pictureUpload = multer({
    dest: PICTURE_PATH
  });

  const pictureHandler = pictureUpload.array('picture', 9);





  const pictureResize = async (ctx, next) => {
      //1.获取所有的图像信息
      const files = ctx.req.files;
      
      //2.对图像大小进行处理(两种方式：1.使用sharp库(这个库较大) 2.使用jimp库(这个库较小))
      for(let file of files) {
        // const image = await Jimp.read(file.path) //如果你想堵塞在这里，等图片处理完在执行后面的，你可以使用await搭配前面的async对它进行阻塞
         

         //console.log(file);
         //打印：
        //  {
        //   fieldname: 'picture',
        //   originalname: '28.png',
        //   encoding: '7bit',
        //   mimetype: 'image/png',
        //   destination: './uploads/picture',
        //   filename: '9216ec4c2213b7807fc24a9b221240ec',
        //   path: 'uploads\\picture\\9216ec4c2213b7807fc24a9b221240ec',
        //   size: 1074709
        // }


        const destPath = path.join(file.destination, file.filename);   //file.destination拿到原来图片存放的路径，在拼接上图片的名字作为大图中图和小图的图片路径

        //处理图片比较耗事件，这里我们想的是继续执行后面的代码，让它自己慢慢处理图片，我们这里使用promise的方式
         Jimp.read(file.path).then(image => {   //这里调用Jimp的read方法，将图片路径传进去，它会返回一个image对象
           image.resize(1280, Jimp.AUTO).write(`${destPath}-large`);  //调用resize方法对图片进行裁剪，第一个参数是宽度，第二个参数是高度，Jimp.Auto方法是让高度自适应
           image.resize(640, Jimp.AUTO).write(`${destPath}-middle`);  //然后调用write方法进行写入，
           image.resize(320, Jimp.AUTO).write(`${destPath}-small`);
         })
      }

      await next();
  }

    module.exports = {
        avatarHandler,
        pictureHandler,
        pictureResize
    };
    
} catch (err) {
  console.log(err);
};